package com.hoshiicloud.goods.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hoshiicloud.common.query.OmnipotentParam;
import com.hoshiicloud.common.query.OmnipotentWrapper;
import com.hoshiicloud.common.update.UpdateBatchParam;
import com.hoshiicloud.goods.dto.sku.SkuDTO;
import com.hoshiicloud.goods.entity.sku.ExtSku;
import com.hoshiicloud.goods.param.ListSkuSpuParam;
import com.hoshiicloud.goods.vo.ListSpuSkuVo;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 平台商品表SKU 服务类
 * </p>
 *
 * 2019-06-04  zhangshuhu
 */
public interface ExtSkuService extends IService<ExtSku> {
    Page<ExtSku> getPage(Page<ExtSku> page, QueryWrapper<ExtSku> queryWrapper, String key);

    List<ExtSku> listByParam(QueryWrapper<ExtSku> queryWrapper, String key);

    ExtSku getById(Long id);

    boolean save(ExtSku entity);

    boolean updateById(ExtSku entity);



    boolean deleteById(Long id);

    List<ExtSku> getByIds(List<Long> ids, String key);

    List<SkuDTO> listSKuStockByIds(Wrapper<ExtSku> wrapper);

    /**
     * 新增分店 ExtSku
     */
    ExtSku saveExtSku(ExtSku entity);



    /**
     * 根据spuid获取sku最低价
     */
    Map<String, Object> listSkuMiniPrice(Wrapper<ExtSku> wrapper);

    /**
     * 批量上下架ExtSku
     */
    Boolean ExtSkuShelvesUpAndDown(List<ExtSku> extSkus, Integer status, String message);



    Map<String, String> getStoreSkuNum(List<Long> storeIds, String key);

    Map<String, List<String>> queryStoresAndBaseSkuIds(List<Long> storeIds, String key);

    Boolean saveBatch1(List<ExtSku> list);

    /**
     * 根据自定义条件进行批量更新(特殊：商品编辑)
     */
    boolean updateBatchByWrapper(UpdateBatchParam<ExtSku> updateBatchParam);

    /**
     * 通用的更新操作
     */
    boolean omniExtSkuUpdate(OmnipotentParam<ExtSku> param);

    /**
     * 批量查询
     */
    List<ExtSku> queryBatch(List<OmnipotentWrapper> params);

    List<SkuDTO> headOfficeListSKuStockByIds(QueryWrapper<ExtSku> queryWrapper);

    /**
     * 根据skuId查询出skuName和总店id
     *
     * @param id 分店商品的skuId
     * @return Map
     */
    Map<String, Object> selectSkuNameAndParentId(Long id);

    /**
     * 根据总店id和skuName查询出总店商品的skuId
     *
     * @param maps maps
     * @return Long
     */
    Long selectHeadOfficeSkuId(Map<String, Object> maps);


    /**
     * 获取分店可添加的 sku 分页列表
     */
    Page<ListSpuSkuVo> getBranchStoreCanAddSkuPage(ListSkuSpuParam param);

}
